iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
自我挑戰組

從免費網路資源中入門java系列 第 27

【Day27】Java - 泛型(generic)

  • 分享至 

  • xImage
  •  

泛型的概念是允許你在定義(類別、方法、介面等)時不指定具體型態,可先用參數來定義,實際使用時再根據需求指定型態,這樣可以增強程式的靈活性和重用性。
在 Java 泛型中,<> 內可以放置封裝類別、自定義類別、介面以及其他泛型類別的型態參數。但是,不能直接使用基本資料型態(如 int、double)作為泛型參數,必須使用對應的封裝類別(如 Integer、Double 等)。

以下提供範例比較有無使用泛型的差異

非泛型的範例:

public class Box {
    private Integer value;

    public void set(Integer value) {
        this.value = value;
    }

    public Integer get() {
        return value;
    }
}

泛型的範例:

public class Box<T> {
    private T value;

    public void set(T value) {
        this.value = value;
    }

    public T get() {
        return value;
    }
}

這裡的 Box 是一個典型的泛型類別,T 代表一個任意的資料型態。當你使用這個類別時,你可以指定具體的型態,例如 Integer、String 或任何其他型態:

Box<Integer> intBox = new Box<>();
intBox.set(123);

Box<String> strBox = new Box<>();
strBox.set("Hello");

使用泛型的例子讓 Box 類別能夠被重用於不同的型態,而不需要針對每一種型態去撰寫單獨的類別。

如果沒有使用泛型,Java 編譯器會將未定義型別的變數視為 Object 型別,這是因為在 Java 中,Object 是所有類別的父類別。
如果有使用泛型,在使用該類別的時候必須指定具體的型別。編譯器會在編譯時期檢查型別,這樣可以在編譯階段就發現型別不匹配的問題,避免在運行時出現類型轉換異常的錯誤。

泛型的使用範圍很廣,主要包括類別(class)、介面(interface)、方法(method)等。

以下是泛型方法的範例:

import java.util.List;

public class GenericMethodExample {
    
    // 泛型方法
    public static <T> void printList(List<T> list) {
        for (T element : list) {
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        // 使用泛型方法印出不同型別的list
        List<String> stringList = List.of("Apple", "Banana", "Cherry");
        printList(stringList); // output:Apple Banana Cherry

        List<Integer> intList = List.of(1, 2, 3, 4, 5);
        printList(intList); // output:1 2 3 4 5
    }
}

上一篇
【Day26】Java - Map (HashMap、TreeMap、LinkedHashMap)
下一篇
【Day28】Java 例外處理:如何處理錯誤和異常情況
系列文
從免費網路資源中入門java30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言